package com.ylr.user.framework.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.ylr.user.framework.entity.HistoryLoginEntity;

/**
 * Created by IntelliJ IDEA.
 *
 * @author wei
 * date: 2021-11-05 22:40:00
 * className: HistoryLoginService 用户历史登录操作请求服务接口
 * version: 1.0
 * description:
 */
public interface HistoryLoginService extends IService<HistoryLoginEntity> {

    /**
     * 保存用户历史登录记录操作
     * @param userId         用户id
     * @param channel        登录渠道
     * @param loginIP        用户登录ip地址
     * @param requestAddress 用户登录的真实地址
     * @param loginTime      当前系统时间（时间戳）
     * @param token          用户令牌信息
     * @param expireTime     登录过期时间（时间戳）
     */
    void saveUserLogin(Long userId, Integer channel, String loginIP, String requestAddress, Long loginTime, String token,
                       Long expireTime, String refreshToken, Long refreshExpireTime);

    /**
     * 用户单点登录验证
     * @param userId         用户id
     * @param nowTime        当前系统时间（时间戳）
     * @param expireTime     登录过期时间（时间戳）
     * @param loginIP        用户登录ip地址
     * @param requestAddress 用户登录的真实地址
     */
    String checkSingleLogin(Long userId, long nowTime, long expireTime, String loginIP, String requestAddress);

    /**
     * 用户单点登录验证
     * @param userId         用户id
     * @param securityUser   用户登录对象
     * @param nowTime        当前系统时间（时间戳）
     * @param expireTime     登录过期时间（时间戳）
     * @param loginIP        用户登录ip地址
     * @param requestAddress 用户登录的真实地址
     */
//    void checkSingleLogin(Long userId, SecurityUser securityUser, long nowTime, long expireTime, String loginIP, String requestAddress);

    /**
     * 分页获取历史登录记录信息列表
     * @param page 查询的页码
     */
//    PageDto getUserHistoryLoginList(Integer page);

    /**
     * 获取用户最新的一条历史登录记录操作
     * @param userId 用户id
     * @return 历史登录记录信息对象
     */
    HistoryLoginEntity getLastOneHistoryLoginInfo(Long userId);

    /**
     * 更新用户历史登录记录操作
     * @param historyLogin 登录记录对象
     */
    void updateHistoryLogin(HistoryLoginEntity historyLogin);

    /**
     * 用户登录状态清空操作
     * @param historyLogin 用户最新一条登录记录信息
     * @param userId       用户id
     * @param remark       备注信息
     */
    void userLogout(HistoryLoginEntity historyLogin, Long userId, String remark);

    /**
     * 将所有小于参数时间的登录记录清除成退出登录状态
     * @param nowTime 当前系统时间（时间戳）
     */
    void userLogoutByExpireTime(Long nowTime);
}

